package br.boicotando.persistencia;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.UniqueConstraint;

import br.boicotando.dominio.Sexo;
import br.boicotando.shared.Util;

@Entity
@Table(name = "CLIENTE", uniqueConstraints = {
		@UniqueConstraint(columnNames = { "NOME", "SOBRENOME" })})
@SuppressWarnings("serial")
public class ECliente implements Serializable {
	
	@Id
	@Column(name = "ID", length = 50, nullable = false, updatable = false)
	private String id;
	@Column(name = "NOME", length = 40, nullable = false)
	private String nome;
	@Column(name = "SOBRENOME", length = 40, nullable = false)
	private String sobrenome;
	@Column(name = "CPF", length = 11, nullable = false, unique = true)
	private String CPF;
	@Column(name = "DATA_NASCIMENTO", nullable = false)
	@Temporal(TemporalType.DATE)
	private Date dataNascimento;
	@Enumerated(EnumType.STRING)
	@Column(name = "SEXO", nullable = false)
	private Sexo sexo;
	@Embedded
	private EEndereco endereco;
	@Column(name = "NUMERO_CELULAR", length = 20)
	private String numeroCelular;
	@Column(name = "NUMERO_FONE", length = 20, nullable = false)
	private String numeroFone;
	@Column(name = "NUMERO_FONE2", length = 20, nullable = false)
	private String numeroFone2;
	@Column(name = "EMAIL", length = 255, nullable = false, unique = true)
	private String email;
	@Column(name = "SENHA", length = 40, nullable = false)
	private String senha;

	public ECliente() {
		id = Util.getAUID();
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getSobrenome() {
		return sobrenome;
	}

	public void setSobrenome(String sobrenome) {
		this.sobrenome = sobrenome;
	}

	public String getCPF() {
		return CPF;
	}

	public void setCPF(String CPF) {
		this.CPF = CPF;
	}

	public Date getDataNascimento() {
		return dataNascimento;
	}

	public void setDataNascimento(Date dataNascimento) {
		this.dataNascimento = dataNascimento;
	}

	public Sexo getSexo() {
		return sexo;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public void setSexo(Sexo sexo) {
		this.sexo = sexo;
	}

	public EEndereco getEndereco() {
		return endereco;
	}

	public void setEndereco(EEndereco endereco) {
		this.endereco = endereco;
	}

	public String getNumeroCelular() {
		return numeroCelular;
	}

	public void setNumeroCelular(String numeroCelular) {
		this.numeroCelular = numeroCelular;
	}

	public String getNumeroFone() {
		return numeroFone;
	}

	public void setNumeroFone(String numeroFone) {
		this.numeroFone = numeroFone;
	}

	public String getNumeroFone2() {
		return numeroFone2;
	}

	public void setNumeroFone2(String numeroFone) {
		this.numeroFone2 = numeroFone;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		ECliente other = (ECliente) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}

}
